Chrome 138 beta

Published: May 28, 2025

Unless otherwise noted, the following changes apply to the newest Chrome beta channel release for Android, ChromeOS, Linux, macOS, and Windows. Learn more about the features listed here through the provided links or from the list on ChromeStatus.com. Chrome 138 is beta as of 28 May, 2025. You can download the latest on Google.com for desktop or on Google Play Store on Android.

CSS and UI

This release adds six new CSS and UI features.

CSS stretch sizing keyword

A keyword for CSS sizing properties (for example, width, and height) that allows elements to grow to exactly fill their containing block's available space. It is similar to 100%, except the resulting size is applied to the element's margin box instead of the box indicated by box-sizing. Using this keyword allows the element to keep its margins while still being as large as possible.

The sign-related functions abs() and sign() compute various functions related to the sign of their argument.

CSS env variable for OS-level font scale

Exposes a user's preferred font scale to CSS. Currently, it is not practical for a page to detect if the user has changed their preferred font size with the Operating System's preferences. This CSS environment variable will reflect the scale chosen by the user.

CSS sibling-index() and sibling-count()

The sibling-index() and sibling-count() functions can be used as integers in CSS property values to style an element based on its position among its siblings, or the total number of siblings respectively. These functions can be used directly as integer values, but more interestingly inside calc() expressions.

li {
  animation-delay: calc(0.1s * sibling-index());
}

Interpolation progress functional notation: CSS progress() function

The progress() functional notation is a math function that returns a <number> value representing the position of one calculation (the progress value) between two other calculations (the progress start value and progress end value).

Viewport Segments Enumeration API

The Viewport Segments API allows developers to adapt their web layout to target foldable devices. Viewport segments define the position and dimensions of a logically separate region of the viewport. Viewport segments are created when the viewport is split by one or more hardware features (such as a fold or a hinge between separate displays) that act as a divider; segments are the regions of the viewport that can be treated as logically distinct by the developer.

Web APIs

Add support for video frame orientation metadata to WebCodecs

Introduces rotation: int and flip: bool values to various video related interfaces in WebCodecs so that developers can work with frame sources that have orientation (for example, Android cameras, and certain media). The VideoFrame interface grows the ability to create VideoFrames with arbitrary rotation and flip as well as accessors for this information on the VideoFrame object. The VideoDecoderConfig object gains rotation and flip fields that are emitted on decoded VideoFrame objects automatically. The VideoEncoder class gains mechanisms for passing rotation and flip information from encode() to the VideoDecoderConfig emitted as part of EncodedVideoChunkMetadata. If encode() is called with frames with different orientationnonfatalatal exception will be thrown. The configure() method can be used to reset the allowed orientation.

Crash Reporting API: is_top_level and visibility_state

This feature adds is_top_level and visibility_state string fields to the crash reporting API body that gets sent to the default reporting endpoint for crash reports.

Escape < and > in attributes on serialization

Escape < and > in values of attributes on serialization. This mitigates the risk of mutation XSS attacks, which occur when the value of an attribute is interpreted as a start tag token after being serialized and re-parsed.

Integrity Policy for scripts

Subresource-Integrity (SRI) enables developers to make sure the assets they intend to load are indeed the assets they are loading. But there's no current way for developers to be sure that all of their scripts are validated using SRI. The Integrity-Policy header gives developers the ability to assert that every resource of a given type needs to be integrity-checked. If a resource of that type is attempted to be loaded without integrity metadata, that attempt will fail and trigger a violation report.

Predictable reported storage quota

Report a predictable storage quota from StorageManager's Estimate API for sites that don't have unlimited storage permissions. It is possible to detect a user's browsing mode using the reported storage quota because the storage space made available is significantly smaller in incognito mode than in regular mode.

This is a mitigation that prevents detection of a user's browsing mode using the storage API by reporting an artificial quota, equal to usage + min(10 GiB, disk rounded up to the nearest 1 GiB), in all browsing modes for sites with limited storage permissions. Sites with unlimited storage permissions will be unaffected. Enforced quota will also be unaffected.

pushsubscriptionchange event upon resubscription

Fire the pushsubscriptionchange event in service workers when an origin for which a push subscription existed in the past, but which was revoked because of a permission change (from granted to deny/default), is re-granted notification permission. The event will be fired with an empty oldSubscription and newSubscription.

Speculation rules: Add prefetchCache and prerenderCache to Clear-Site-Data header

Two new values for the Clear-Site-Data header to help developers target clearing the prerender and prefetch cache: prefetchCache and prerenderCache. These can be sent on any requests and don't need to be made on the document request (for example, they can be returned on add-to-basket, or login and logout API call responses to clear speculations on state change).

Speculation rules: target_hint field

This extends speculation rules syntax to allow developers to specify the target_hint field. This field provides a hint to indicate a target navigable where a prerendered page will eventually be activated. When _blank is specified as a hint, a prerendered page can be activated for a navigable opened by window.open(). The field is not supported for prefetching.

Strict Same Origin Policy for Storage Access API

Adjusts the Storage Access API semantics to strictly follow the Same Origin Policy, with regard to security. That is, using document.requestStorageAccess() in a frame only attaches cookies to requests to the iframe's origin (not site) by default.

Summarizer API

A JavaScript API for producing summaries of input text, backed by an AI language model. Browsers and operating systems are increasingly expected to gain access to a language model. By exposing this built-in model, we avoid every website needing to download their own multi-gigabyte language model, or send input text to third-party APIs. The summarizer API in particular exposes a high-level API for interfacing with a language model in order to summarize inputs for a variety of use cases in a way that does not depend on the specific language model in question. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable.

Learn more in Generate concise summaries with built-in AI.

Language Detector API

A JavaScript API to detect what language is used in certain text, with levels of confidence. This is an important supplement to translation is language detection and can be used in combination with the Translator API. For example, take user input in an unknown language, determine its language, then translate it to a specific target language. While Browsers often already have language detection capabilities, this offers the same power to web developers with a JavaScript API, supplementing the translation API.

An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model from downloading, which would make this API unavailable.

Learn more in Detect which language is used with built-in AI.

Translator API

A JavaScript API to provide language translation capabilities to web pages. While browsers are increasingly offering language translation to their users, such translation capabilities can also be useful to web developers. This is especially the case when browser's built-in translation abilities cannot help, such as with live and interactive services. An enterprise policy (GenAILocalFoundationalModelSettings) is available to disable the underlying model downloading which would render this API unavailable.

Learn more in Translation with built-in AI.

Web app scope extensions

Adds a "scope_extensions" web app manifest field that lets web apps extend their scope to other origins. This lets sites that control multiple subdomains and top level domains be presented as a single web app. Requires listed origins to confirm association with the web app using a .well-known/web-app-origin-association configuration file.

Web serial over Bluetooth on Android

This feature allows web pages and web apps to connect to serial ports over Bluetooth on Android devices. Chrome on Android now supports Web Serial API over Bluetooth RFCOMM. Existing enterprise policies (DefaultSerialGuardSetting, SerialAllowAllPortsForUrls, SerialAllowUsbDevicesForUrls, SerialAskForUrls, and SerialBlockedForUrls) on other platforms are enabled in future_on states for Android. All policies except SerialAllowUsbDevicesForUrls will be enabled after the feature is enabled. SerialAllowUsbDevicesForUrls will be enabled in a future launch after Android provides system level support of wired serial ports.

Deprecations and removals

This version of Chrome introduces the following deprecations and removals. Visit ChromeStatus.com for lists of planned deprecations, current deprecations and previous removals.

This release of Chrome deprecates two features.

Deprecate asynchronous range removal for Media Source Extensions

The Media Source standard long ago changed to disallow ambiguously defined behavior involving asynchronous range removals:

  • SourceBuffer.abort() no longer aborts SourceBuffer.remove() operations.
  • Setting MediaSource.duration can no longer truncate currently buffered media.

Exceptions will now be thrown in both of these cases.

Remove SwiftShader fallback

Allowing automatic fallback to WebGL backed by the software renderer SwiftShader is deprecated and WebGL context creation will fail instead of falling back to SwiftShader. This was done for two primary reasons:

  1. SwiftShader is a high security risk due to JIT-ed code running in Chromium's GPU process.
  2. Users have a poor experience when falling back from a high-performance GPU-backed WebGL to a CPU-backed implementation. Users have no control over this behavior and it is difficult to describe in bug reports.

During the deprecation period, a warning will appear in the Chrome DevTools console when a WebGL context is created and backed with SwiftShader. Passing --enable-unsafe-swiftshader will remove this warning message.